#ifndef __APP_BUFFER_H__
#define __APP_BUFFER_H__

#include "stdint.h"
#include "pthread.h"
// 小缓冲区
typedef struct
{
    uint8_t *ptr;           //容器指针
    uint16_t total_size;    //容器大小
    uint16_t len;           //数据长度
} SubBuffer;

// 大缓冲区
typedef struct 
{
    SubBuffer *sub_buffer[2];       // 2个小缓冲区
    int read_index;                 // 读取索引
    int write_index;                // 写入索引
    pthread_mutex_t read_mutex;     // 读取互斥锁
    pthread_mutex_t write_mutex;    // 写入互斥锁
} Buffer;

/**
 * @brief 初始化缓冲区
 * 
 * @param buffer 缓冲区指针
 * @param size 缓冲区大小
 * @return Buffer* 缓冲区指针
 */
Buffer *app_buffer_init(int size);


/**
 * @brief 释放缓冲区
 * 
 * @param buffer 缓冲区指针
 */
void app_buffer_free(Buffer *buffer);


/**
 * @brief 写入数据 (一帧)
 * 
 * @param buffer 缓冲区指针
 * @param data 数据指针
 * @param len 数据长度
 * @return int 写入长度
 */
int app_buffer_write(Buffer *buffer, uint8_t *data, uint16_t len);

/**
 * @brief 读取数据 (一帧)
 * 
 * @param buffer 缓冲区指针
 * @param data 数据指针
 * @param len 数据长度
 * @return int 读取长度
 */
int app_buffer_read(Buffer *buffer, uint8_t *data, uint16_t len);

#endif /* __APP_BUFFER_H__ */
